--region "Lua.global.type"
DATA_TYPE_REGISTERS = {} -- 数据类型注册表(name:string -> fn:fun(type, obj):boolean)
original_type = type
local function new_type(obj)
    local init_type = original_type(obj)
    for name, fn in pairs(DATA_TYPE_REGISTERS) do
        if fn(init_type, obj) then
            return name
        end
    end
    return init_type
end
rawset(_G, "type", new_type) --全局表需经过处理(游戏已处理), 否则会报错
--endregion


--region "Lua.global.next"
original_next = next
local function new_next(t, index)
    local mt = getmetatable(t)
    if mt and type(mt.__next) == "function" then
        return mt.__next(t, index)
    else
        return original_next(t, index)
    end
end
rawset(_G, "next", new_next) --全局表需经过处理(游戏已处理), 否则会报错
--endregion


--region "Lua.global.pairs"
original_pairs = pairs
local function new_pairs(obj)
    local mt = getmetatable(obj)
    if _VERSION < 5.2 and type(mt.__pairs) == "function" then
        return mt.__pairs(obj)
    else
        return original_pairs(obj)
    end
end
rawset(_G, "pairs", new_pairs) --全局表需经过处理(游戏已处理), 否则会报错
--endregion


--region "Lua.global.ipairs"
original_ipairs = ipairs
local function new_ipairs(obj)
    local mt = getmetatable(obj)
    if _VERSION < 5.2 and type(mt.__ipairs) == "function" then
        return mt.__ipairs(obj)
    else
        return original_ipairs(obj)
    end
end
rawset(_G, "ipairs", new_ipairs) --全局表需经过处理(游戏已处理), 否则会报错
--endregion
